qemu: fix guest agent patch
authorVladimir Ermakov <[email protected]>
Fri, 17 Jan 2025 18:44:02 +0000 (18:44 +0000)
committerTianling Shen <[email protected]>
Thu, 24 Apr 2025 11:46:08 +0000 (19:46 +0800)
Replace to fix #25209

Signed-off-by: Vladimir Ermakov <[email protected]>
utils/qemu/Makefile
utils/qemu/patches/0007-qga-invoke-separate-applets-for-guest-shutdown-modes.patch

index 53ec509de0d2744150e73a58ea9a010a2eaf5b52..e79e7058878ff3e603a97fe1a9fabff31865cb0a 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=qemu
 PKG_VERSION:=9.1.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_HASH:=19fd9d7535a54d6e044e186402aa3b3b1bdfa87c392ec8884855592c8510c96f
 PKG_SOURCE_URL:=https://download.qemu.org/
index 4cb98ff51a9e66534b22dd2d326df483c13ce400..9b1c572b4ccd844d48a4eb55c4fac52ba2cc167d 100644 (file)
@@ -1,52 +1,53 @@
-From 80ec6872aceb18c68b1cf5b6f8acd6ad667cbd4f Mon Sep 17 00:00:00 2001
-From: Yousong Zhou <[email protected]>
-Date: Thu, 17 Dec 2020 15:55:55 +0800
-Subject: [PATCH] qga: invoke separate applets for guest-shutdown modes
-
-/sbin/shutdown is not available on OpenWrt by default
-
-Origin: "main/qemu: fix shutdown from guest agent"
-https://gitlab.alpinelinux.org/alpine/aports/commit/76b81b486480fd9c3294cd420bcf2df01c27790d
+Origin: community/qemu: fix qemu-guest-agent patch
+https://gitlab.alpinelinux.org/alpine/aports/-/blob/b720d51ec844d4754dd5b29084350aa1f5c9a74d/community/qemu/guest-agent-shutdown.patch
 ---
- qga/commands-posix.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
 --- a/qga/commands-posix.c
 +++ b/qga/commands-posix.c
-@@ -217,6 +217,7 @@ out:
- void qmp_guest_shutdown(const char *mode, Error **errp)
- {
+@@ -219,43 +219,21 @@ void qmp_guest_shutdown(const char *mode
      const char *shutdown_flag;
-+    const char *fallback_cmd = NULL;
      Error *local_err = NULL;
  
- #ifdef CONFIG_SOLARIS
-@@ -236,10 +237,13 @@ void qmp_guest_shutdown(const char *mode
+-#ifdef CONFIG_SOLARIS
+-    const char *powerdown_flag = "-i5";
+-    const char *halt_flag = "-i0";
+-    const char *reboot_flag = "-i6";
+-#elif defined(CONFIG_BSD)
+-    const char *powerdown_flag = "-p";
+-    const char *halt_flag = "-h";
+-    const char *reboot_flag = "-r";
+-#else
+-    const char *powerdown_flag = "-P";
+-    const char *halt_flag = "-H";
+-    const char *reboot_flag = "-r";
+-#endif
++    const char *argv[] = {NULL, NULL};
      slog("guest-shutdown called, mode: %s", mode);
      if (!mode || strcmp(mode, "powerdown") == 0) {
-         shutdown_flag = powerdown_flag;
-+        fallback_cmd = "/sbin/poweroff";
+-        shutdown_flag = powerdown_flag;
++        argv[0] = "poweroff";
      } else if (strcmp(mode, "halt") == 0) {
-         shutdown_flag = halt_flag;
-+        fallback_cmd = "/sbin/halt";
+-        shutdown_flag = halt_flag;
++        argv[0] = "halt";
      } else if (strcmp(mode, "reboot") == 0) {
-         shutdown_flag = reboot_flag;
-+        fallback_cmd = "/sbin/reboot";
+-        shutdown_flag = reboot_flag;
++        argv[0] = "reboot";
      } else {
          error_setg(errp,
                     "mode is invalid (valid values are: halt|powerdown|reboot");
-@@ -258,8 +262,12 @@ void qmp_guest_shutdown(const char *mode
+         return;
+     }
  
+-    const char *argv[] = {"/sbin/shutdown",
+-#ifdef CONFIG_SOLARIS
+-                          shutdown_flag, "-g0", "-y",
+-#elif defined(CONFIG_BSD)
+-                          shutdown_flag, "+0",
+-#else
+-                          "-h", shutdown_flag, "+0",
+-#endif
+-                          "hypervisor initiated shutdown", (char *) NULL};
+-
      ga_run_command(argv, NULL, "shutdown", &local_err);
      if (local_err) {
--        error_propagate(errp, local_err);
--        return;
-+        const char *fallback_argv[] = {fallback_cmd, (char *) NULL};
-+        ga_run_command(fallback_argv, NULL, fallback_cmd, &local_err);
-+        if (local_err) {
-+            error_propagate(errp, local_err);
-+            return;
-+        }
-     }
-     /* succeeded */
+         error_propagate(errp, local_err);